package com.shujia.day06;

import java.util.Scanner;

public class Demo09Object {
    public static void main(String[] args) {
        /*
           TODO Object类：
                Object 是所有类的顶级父类  默认在运行时对其进行设置
                    对于Java中的类，都可以获取到顶级父类中继承的方法
         */
        // 默认有无参构造
        Object object1 = new Object();
        Obj obj1 = new Obj();

        /*
            TODO 方法：
                 clone()
                 equals => 判断两个对象是否相等
                      equals 默认底层使用 == 对两个对象地址进行判断，如果地址相同，那么结果为true
                 hashCode() => 返回对象的Hash值，该函数是一个映射函数  传入一个值，肯定有一个唯一对应的随机的值
         */
        // public boolean equals(Object obj)
        Object object2 = new Object();
        Object object3 = object1;
        System.out.println(object1.equals(object3)); // true
        System.out.println(object1.equals(object2)); // false

        Obj obj2 = new Obj();
        Obj obj3 = obj1;
        System.out.println(obj1.equals(obj3)); // true
        System.out.println(obj1.equals(obj2)); // false

        String str = "1";
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String inputStr = scanner.next();
        if (str == inputStr){
            System.out.println("通过 == 判断 输入的1和定义的1相等");
        }else if (str.equals(inputStr)){ // TODO 对于字符串的equals方法 对其进行了重写 不是Object中的逻辑
            System.out.println("通过 equals 判断 输入的1和定义的1相等");
        }else {
            System.out.println("不相等");
        }

        /*
            补充: instanceof => 用于判断某个对象是否为类的实例
         */

        System.out.println(obj3 instanceof Obj); // true =>  如果是继承关系呢？

        Per per1 = new Per("001");
        Per per2 = new Per("001");
        // 虽然为两个内存地址，但是表示的内容是一样的
        System.out.println("比较结果:"+per1.equals(per2));

        Obj obj = new Obj();
        System.out.println("比较结果:"+per1.equals(obj));


        System.out.println("hash值："+obj.hashCode()); // 692404036

    }
}

class Obj{

}

class Per{
    String id;

    public Per(String id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object obj) {
        // 此时需要对两个人进行判断，判断依据是ID 是否相同
        // Object 是所有类的父类 => 通过强制类型转换 将其转换成 Per
        if (obj instanceof Per){
            Per otherPer = (Per) obj;
            return this.id.equals(otherPer.id);
        }else {
            return false;
        }
    }
}
